读取网络数据是 iOS 开发中很重要的部分,下面我们用获取一个网页的方式来了解获取网络数据。
下面我们使用 NSString 来接收一个网页的源代码:
|
|
而很多时候我们在读取一个 HTTP 协议的数据时,可能并不是一个字符串的数据,有可能是一个二进制类型的数据,如果说要把一个页面读取成二进制的数据的话,可以直接把它读成一个 NSData 类型,如下:
|
|
在这里虽然表现的是二进制文件,实际上和用 NSString 接收一样,NSData 实际上也是这个网页的源代码,所以当我们获取到网页的数据,并希望对它做一些修改时,也可以将 NSData 转成 NSString:
|
|
但实际上很多在通信的时候,并不是使用这两种方式,如果使用以上两种方式,有两点点是必须的:
这个网址必须是可以打开的。
因为如果这个链接是不能打开的,那么程序会一直停留在获取这里;
这个通信的时间特别短,特别快;
因为这两种通信方式都是同步的,这就意味着此时主线程无法对 UI 进行响应;
所以说实际开发过程中,一般不使用这两种方式进行通讯。这两种方式一般会用来读取本地的数据,而最常使用的API 是使用 NSURLConnection 进行网络的同步请求和异步请求。
NSURLConnection
|
|
sendSynchronousRequest 的两个传入参数:分别是网络请求和URL的回应信息,上面我们了解了网络请求这个传入参数,那么 URL 的回应信息 returningResponse 又是什么呢?实际上他是HTTP协议的协议头,它也可以被打印出来:
|
|
NSURLSession
在 iOS9 中, NSURLConnection 已经被抛弃,取而代之的是NSURLSession。 NSURLSession的使用步骤进步如下:
- 通过 NSURLSession 的实例创建 NSURLSessionTask;
- 执行 NSURLSessionTask;
NSURLSessionTask 可以简单理解为任务,如数据请求任务,下载任务,上传任务等,它是一个抽象类,而我们使用的是它的子类:
- NSURLSessionDataTask
- NSURLSessionUploadTask
- NSURLSessionDownloadTask
从这几个子类的名字就可以大概猜出他们的作用了,接下来我们就用一个简单的 get 请求,来使用NSURLSessionDataTask。后面的两个子类我们会在以后单独开篇再讲。
|
|
以上就是 iOS 进行网络获取主要的几种方法。